import { request } from '../../utils/request';
Page({

  //跳转到reason页面
  goToReason(event) {
    const id = event.currentTarget.dataset.id;
    const status = event.currentTarget.dataset.status;
    // 1. 跳转到普通页面（保留当前页）
    wx.navigateTo({
      url: `/pages/order-reason/order-reason?id=${id}&orderStatus=${status}` 
    })
  },

  /**
   * 页面的初始数据
   */
  data: {
    orderInfo: {},
    orderStatus: "0", // 订单状态（0-待支付，1-待服务，2-已执行，3-已完成，4-已关闭，5-已退款）
    createdAt: "", // 订单创建时间（实际从接口获取）
    countdown: "15:00", // 初始倒计时
    reason:"",
    statusMap: {
      "0": { title: '订单待支付', desc: '' }, // 待支付的desc由倒计时替代
      "1": { title: '订单待服务', desc: '乐康工作人员将竭诚为您服务' },
      "2": { title: '订单已执行', desc: '' },
      "3": { title: '订单已完成', desc: '' },
      "4": { title: '订单已关闭', desc: '关闭原因: 超时未支付' },
      "5": { title: '订单已退款', desc: '' },
    },
    countdownTimer: null // 定时器实例，用于清除
  },





  onLoad(options) {
    // 解码并解析JSON字符串为对象
    const item = JSON.parse(decodeURIComponent(options.item));
    // 可将item存入页面数据，用于渲染
    this.setData({
      orderInfo: item,
      createdAt:item.createdAt,
      orderStatus:item.orderStatus,
      reason:item.cancelReason
    });
    console.log(this.data.orderInfo)
    this.checkTimeout();
  },

  // 检查是否已超时（进入页面时触发）
  checkTimeout() {
    const { orderStatus, createdAt } = this.data;
    // 仅待支付状态（0）需要判断超时
    if (orderStatus !== "0" || !createdAt) return;

    const createTime = new Date(createdAt).getTime();
    const deadline = createTime + 15 * 60 * 1000; // 15分钟后超时
    const now = new Date().getTime();

    // 若当前时间已超过截止时间（已超时）
    if (now > deadline) {
      wx.showLoading({ title: '检测到超时，处理中...' });
      // 调用接口更新订单状态为“已关闭”（4）
      this.updateOrderStatus()
        .then(() => {
          wx.hideLoading();
          // 更新页面状态，停止倒计时
          this.setData({ orderStatus: "4" });
          clearInterval(this.data.countdownTimer);
          wx.showToast({ title: '订单已因超时关闭', icon: 'none' });
          console.log()
        })
        .catch(err => {
          wx.hideLoading();
          wx.showToast({ title: '超时处理失败', icon: 'none' });
          console.error('超时接口调用失败：', err);
        });
    } else {
      // 未超时，启动倒计时
      this.initCountdown(deadline);
    }
  },

  // 初始化倒计时（未超时情况下）
  initCountdown(deadline) {
    this.setData({
      countdownTimer: setInterval(() => {
        const now = new Date().getTime();
        const diff = deadline - now;
        if (diff <= 0) {
          // 倒计时结束（理论上此处不会触发，因进入页面时已checkTimeout）
          this.updateOrderStatus()
        .then(() => {
          wx.hideLoading();
          // 更新页面状态，停止倒计时
          this.setData({ orderStatus: "4" });
          clearInterval(this.data.countdownTimer);
          wx.showToast({ title: '订单已因超时关闭', icon: 'none' });
        })
        .catch(err => {
          wx.hideLoading();
          wx.showToast({ title: '超时处理失败', icon: 'none' });
          console.error('超时接口调用失败：', err);
        });
          return;
        }
        // 格式化倒计时
        const minutes = Math.floor(diff / (60 * 1000)).toString().padStart(2, '0');
        const seconds = Math.floor((diff % (60 * 1000)) / 1000).toString().padStart(2, '0');
        this.setData({ countdown: `${minutes}:${seconds}` });
      }, 1000)
    });
  },


  // 调用接口更新订单状态（模拟）
  updateOrderStatus() {
    const requestData = {
      id:this.data.orderInfo.id,
      orderStatus:"4",
      reason:"超时未支付"
    };
    return request("/greenold-order/order",requestData,'PUT').then(res => {
      if (res.code === 200) {
        return Promise.resolve({ code: 200, message: '处理成功' });
      } else {
        return Promise.resolve({ code: 500, message: '处理失败' });
      }
    })
  },

  onUnload() {
    // 页面销毁时清除定时器，避免内存泄漏
    clearInterval(this.countdownTimer);
  }

})

